#!/usr/bin/env python
from misc.utility.scons_hints import *

from methods import print_error

Import("env")

env.drivers_sources = []
supported = env.get("supported", [])

# OS drivers
SConscript("unix/SCsub")
SConscript("windows/SCsub")

# Sounds drivers
SConscript("alsa/SCsub")
SConscript("pulseaudio/SCsub")
if env["platform"] == "windows":
    SConscript("wasapi/SCsub")
    if not env.msvc:
        SConscript("backtrace/SCsub")
if env["xaudio2"]:
    if "xaudio2" not in supported:
        print_error("Target platform '{}' does not support the XAudio2 audio driver".format(env["platform"]))
        Exit(255)
    SConscript("xaudio2/SCsub")

# Shared Apple platform drivers
if env["platform"] in ["macos", "ios", "visionos"]:
    SConscript("apple/SCsub")
    SConscript("coreaudio/SCsub")
if env["platform"] in ["ios", "visionos"]:
    SConscript("apple_embedded/SCsub")

# Accessibility
if env["accesskit"] and env["platform"] in ["macos", "windows", "linuxbsd"]:
    SConscript("accesskit/SCsub")

# Midi drivers
SConscript("alsamidi/SCsub")
if env["platform"] in ["macos"]:
    SConscript("coremidi/SCsub")
SConscript("winmidi/SCsub")

# Graphics drivers
if env["vulkan"]:
    SConscript("vulkan/SCsub")
if env["d3d12"]:
    if "d3d12" not in supported:
        print_error("Target platform '{}' does not support the D3D12 rendering driver".format(env["platform"]))
        Exit(255)
    SConscript("d3d12/SCsub")
if env["opengl3"]:
    SConscript("gl_context/SCsub")
    SConscript("gles3/SCsub")
    SConscript("egl/SCsub")
if env["metal"]:
    if "metal" not in supported:
        print_error("Target platform '{}' does not support the Metal rendering driver".format(env["platform"]))
        Exit(255)
    SConscript("metal/SCsub")

# Input drivers
if env["sdl"] and env["platform"] in ["linuxbsd", "macos", "windows"]:
    # TODO: Evaluate support for Android, iOS, and Web.
    SConscript("sdl/SCsub")

# Core dependencies
SConscript("png/SCsub")

env.add_source_files(env.drivers_sources, "*.cpp")

lib = env.add_library("drivers", env.drivers_sources)
env.Prepend(LIBS=[lib])
